package com.lyf.scm.plan.domain.service;

import com.github.pagehelper.PageInfo;
import com.lyf.scm.common.model.ExcelExportDataDTO;
import com.lyf.scm.plan.api.dto.SalesPlanOtherDTO;
import com.lyf.scm.plan.api.dto.SalesPlanOtherInfoDTO;
import com.lyf.scm.plan.api.dto.SalesPlanOtherSimpleDTO;
import com.lyf.scm.plan.api.dto.SalesPlanOtherDTO;
import org.springframework.scheduling.annotation.Async;

import java.util.List;

/**
 * @author Martin
 * @date 2020-10-28 21:51
 */
public interface SalesPlanOtherEsService {

    /**
     * 按条件查询其他渠道计划(周)
     *
     * @param slaesPlanOther
     * @return
     */
    //PageInfo<SalesPlanOtherInfoDTO> listWeekBySelective(SalesPlanOtherDTO slaesPlanOther);

    /**
     * 查询全渠道其他渠道计划(范围)
     *
     * @param slaesPlanOther
     * @return
     */
    //List<SalesPlanOtherInfoDTO> listAllByCycles(SalesPlanOtherDTO slaesPlanOther);

    /**
     * 导入其他渠道
     *
     * @param dtos
     * @param type
     * @param id
     * @return
     */
    Integer importPlanType(List<SalesPlanOtherDTO> dtos, Integer type, Long id);

    /**
     * 修改确认量
     *
     * @param all
     * @param unitType
     * @param userId
     * @return
     */
    Boolean confirm(List<SalesPlanOtherDTO> all, Long unitType, Integer level);

    /**
     * 获取其他渠道计划当前用户级别
     *
     * @param userId
     * @return
     */
    //Integer getOtherPlanLevel(Long userId);

    /**
     * 营销中心推送其他渠道计划数据
     *
     * @param dtoList
     */
    Boolean addPlanOtherData(List<SalesPlanOtherSimpleDTO> dtoList);

    /**
     * 营销中心修改其他渠道计划状态
     *
     * @param numbers
     */
    Boolean updatePlanOtherType(List<String> numbers);

    /**
     * 导出
     *
     * @param salesPlanOtherDTO
     * @param type
     * @throws Exception
     */
    ExcelExportDataDTO export(SalesPlanOtherDTO salesPlanOtherDTO, Integer type) throws Exception;


    /**
     * 导出模板数据
     *
     * @param type
     * @throws Exception
     */
    ExcelExportDataDTO downLoadTemplate(String type, String date) throws Exception;

    /**
     * 修改确认状态
     *
     * @return
     */
    void updateConfirmStatus();
    /**
     * 修改营销中心取消状态
     *
     * @return
     */
    void updateCancelStatus();

    //Boolean pushDataToTransaction();

    /**
     * 更新数据中为空的仓库信息
     *
     * @return
     */
    void updateWarehouseCode();
    /**
     * 删除对应标识数据
     *
     * @param opSign
     */
    void delete(String opSign);
}
